package edu.stanford.cs.cs294s;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class LocationGallery extends Activity{
	int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
	ImageView preview;
	Uri imageUri;
	
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gallery);
        
        TextView textview = (TextView)findViewById(R.id.galleryText);
        textview.setText("This is the Gallery tab");
        
        Button startCamera = (Button)findViewById(R.id.cameraStartButton);
    
        preview = (ImageView)findViewById(R.id.imageView);
        startCamera.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//define the file-name to save photo taken by Camera activity
				String fileName = Environment.getExternalStorageDirectory() + "/images/newphoto.jpg";
				File file = new File(fileName);
				//create parameters for Intent with filename

				ContentValues values = new ContentValues();
				values.put(MediaStore.Images.Media.TITLE, fileName);
				values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");
				//imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState)
				imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
				
				imageUri = Uri.fromFile(file);

				//create new Intent
				Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
				//intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
				intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
				startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
			}
		});
     
        /* Find the gallery defined in the main.xml
         * Apply a new (custom) ImageAdapter to it. */
        ((Gallery) findViewById(R.id.imageGallery))
                        .setAdapter(new ImageAdapter(this));
    }
	
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		System.err.println("LocationGallery - onActivityResult requestCode - " + requestCode + ", resultCode - " + resultCode);
		if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
		    if (resultCode == RESULT_OK) {
		        //use imageUri here to access the image
		    	Bitmap bm = (Bitmap) data.getExtras().get("data");
		    	
		    	ByteArrayOutputStream baos = new ByteArrayOutputStream();  
		    	bm.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object   
		    	byte[] b = baos.toByteArray();
		    	
		    	//preview.setImageDrawable(getResources().getDrawable(R.drawable.androidmarker));
				//mImageView.setImageBitmap(bm);
		    	
		    	String fileName = Environment.getExternalStorageDirectory() + "/images/newphoto.jpg";
				File file = new File(fileName);

		    	//preview.setImageURI(Uri.fromFile(file));
		    	
		    	ImageUpload imgUp = new ImageUpload();
		    	imgUp.upload3(b);
		    	//imgUp.uploadImage2(fileName);
		    	//preview.setImageBitmap(bm);
		    	System.err.println("Picture was successfully taken");
		    	Toast.makeText(this, "Picture was successfully taken", Toast.LENGTH_SHORT).show();
		    } else if (resultCode == RESULT_CANCELED) {
		        Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
		    } else {
		        Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
		    }
		}
	}
	
	
	public class ImageAdapter extends BaseAdapter {
        /** The parent context */
        private Context myContext;
 
        /** URL-Strings to some remote images. */
        private String[] myRemoteImages = {
                "http://www.cs.nyu.edu/overton/genearoundtheworld/stanford.jpg",
                "http://images.businessweek.com/ss/08/02/0204_financial_aid/image/stanford.jpg",
                "http://www.google.com/intl/en_ALL/images/srpr/logo1w.png",
                "http://www.saketvora.com/images/stanford_fall/stanford_fall_010.jpg",
                "http://farm1.static.flickr.com/42/118450914_0f256a28d2.jpg",
                "http://i.pbase.com/u39/gbean/large/25718529.146_4628.jpg"
        };
       
        /** Simple Constructor saving the 'parent' context. */
        public ImageAdapter(Context c) { this.myContext = c; }
 
        /** Returns the amount of images we have defined. */
        public int getCount() { return this.myRemoteImages.length; }
 
        /* Use the array-Positions as unique IDs */
        public Object getItem(int position) { return position; }
        public long getItemId(int position) { return position; }
 
        /** Returns a new ImageView to
         * be displayed, depending on
         * the position passed. */
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView i = new ImageView(this.myContext);
 
            try {
                                /* Open a new URL and get the InputStream to load data from it. */
                                URL aURL = new URL(myRemoteImages[position]);
                                URLConnection conn = aURL.openConnection();
                                conn.connect();
                                InputStream is = conn.getInputStream();
                                /* Buffered is always good for a performance plus. */
                                BufferedInputStream bis = new BufferedInputStream(is);
                                /* Decode url-data to a bitmap. */
                                Bitmap bm = BitmapFactory.decodeStream(bis);
                                bis.close();
                                is.close();
                                /* Apply the Bitmap to the ImageView that will be returned. */
                                i.setImageBitmap(bm);
                        } catch (IOException e) {
                                i.setImageResource(R.drawable.icon);
                                Log.e("DEBUGTAG", "Remtoe Image Exception", e);
                        }
           
            /* Image should be scaled as width/height are set. */
            i.setScaleType(ImageView.ScaleType.FIT_CENTER);
            /* Set the Width/Height of the ImageView. */
            i.setLayoutParams(new Gallery.LayoutParams(400, 400));
            return i;
        }
 
        /** Returns the size (0.0f to 1.0f) of the views
         * depending on the 'offset' to the center. */
        public float getScale(boolean focused, int offset) {
                /* Formula: 1 / (2 ^ offset) */
            return Math.max(0, 1.0f / (float)Math.pow(2, Math.abs(offset)));
        }
    }
}
